package site.hanzhe.utils;


import javax.servlet.http.HttpServletRequest;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * 通用工具类
 */
public class CrowdUtil {

    /**
     * 用来判断请求属不属于Ajax请求
     * @param req 请求
     * @return true表示ajax请求
     */
    public static boolean isAjax(HttpServletRequest req){
        String accept = req.getHeader("Accept");
        String with = req.getHeader("X-Requested-With");
        return ( accept != null && accept.contains("application/json") )
                || ( with != null && with.contains("XMLHttpRequest") );
    }

    /**
     * 将字符串进行MD5加密
     * @param source 源字符串
     * @return 加密后的密文
     */
    public static String toMD5( String source ){
        // 如果传来了不符合要求的字符串就抛出异常
        if ( source == null || source.length() < 1 )
            throw new RuntimeException("错误！传入的字符串不能为空");
        String target = null;
        try {
            // 通过MessageDigest获取MD5类型加密对象
            MessageDigest MD5 = MessageDigest.getInstance("MD5");
            // 获取字符串的字节数组使用MD5加密对象进行加密
            byte[] bytes = MD5.digest(source.getBytes());
            // 将加密的字节数组转换为16进制的字符串(转换大写纯属为了好看)
            target = new BigInteger(1, bytes).toString(16).toUpperCase();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return target;
    }

    /**
     * 获取基于雪花算法的分布式ID
     * @return 雪花算法结果
     */
    public static String snowId(){
        return SnowFlakeUtil.nextId();
    }

}